@uiw/react-native
Version:
UIW for React Native
241 lines (221 loc) • 24.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _reactNative = require("react-native");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class Switch extends _react.default.Component {
constructor(props) {
super(props);
this.translateXValue = 2;
this.height = 16;
this.onPress = () => {
const checked = !this.state.checked;
this.setState({
checked
}, () => {
this.animatedStart(checked);
this.props.onValueChange(checked);
});
};
this.measureContainer = event => {
const {
checked
} = this.state;
const {
translateXValue
} = this.state;
const {
height: layoutHeight,
width: layoutWidth
} = event.nativeEvent.layout;
const height = layoutHeight - 4;
const width = height;
const size = {
width,
height
};
this.height = height / 2;
const state = {
containerSize: size
};
this.translateXValue = layoutWidth - 2 - width;
translateXValue.setValue(checked ? layoutWidth - 2 - width : 2);
this.setState({ ...state
}, () => {
this.animatedStart(!!this.props.checked);
});
};
this.state = {
checked: !!this.props.checked,
containerSize: {
width: 0,
height: 0
},
borderValue: new _reactNative.Animated.Value(0),
translateXValue: new _reactNative.Animated.Value(2),
bgOpacity: new _reactNative.Animated.Value(props.value ? 1 : 0)
};
this.animatedStart(!!this.props.checked);
}
UNSAFE_componentWillReceiveProps(nextProps) {
if (this.props.checked !== nextProps.checked) {
this.setState({
checked: !!nextProps.checked
}, () => {
this.animatedStart(!!nextProps.checked);
});
}
}
animatedStart(checked) {
if (checked) {
_reactNative.Animated.parallel([_reactNative.Animated.sequence([_reactNative.Animated.spring(this.state.borderValue, {
toValue: this.height,
overshootClamping: true,
useNativeDriver: false
}), _reactNative.Animated.spring(this.state.bgOpacity, {
toValue: 1,
overshootClamping: true,
useNativeDriver: false
})]), _reactNative.Animated.spring(this.state.translateXValue, {
toValue: this.translateXValue,
overshootClamping: true,
useNativeDriver: false
})]).start();
} else {
_reactNative.Animated.parallel([_reactNative.Animated.sequence([_reactNative.Animated.spring(this.state.bgOpacity, {
toValue: 0,
overshootClamping: true,
useNativeDriver: false
}), _reactNative.Animated.spring(this.state.borderValue, {
toValue: 2,
overshootClamping: true,
useNativeDriver: false
})]), _reactNative.Animated.spring(this.state.translateXValue, {
toValue: 2,
overshootClamping: true,
useNativeDriver: false
})]).start();
}
}
render() {
const {
style,
size,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
checked,
color,
disabled,
thumbColor,
trackStyle,
thumbStyle,
...otherProps
} = this.props;
const {
containerSize
} = this.state;
const bgBorder = this.state.borderValue.interpolate({
inputRange: [2, this.height],
outputRange: [2, this.height] // extrapolate: 'clamp',
});
const sizeStyl = {};
switch (size) {
case 'small':
sizeStyl.height = 20;
sizeStyl.width = 30;
break;
case 'large':
sizeStyl.height = 30;
sizeStyl.width = 48;
break;
default:
sizeStyl.height = 26;
sizeStyl.width = 38;
break;
}
return <_reactNative.View {...otherProps} onLayout={this.measureContainer} style={[styles.warpper, sizeStyl, style]}>
{disabled && <_reactNative.View style={[styles.position, styles.disabled]} />}
<_reactNative.Animated.View style={[styles.bg, styles.position, trackStyle, {
borderWidth: bgBorder
}]} />
<_reactNative.TouchableOpacity // eslint-disable-next-line react-native/no-inline-styles
style={[styles.position, {
zIndex: 1
}]} onPress={this.onPress} />
<_reactNative.Animated.View style={[styles.position, // eslint-disable-next-line react-native/no-inline-styles
{
backgroundColor: this.state.checked ? color : '',
borderRadius: 16,
opacity: this.state.bgOpacity
}]} />
<_reactNative.Animated.View style={[styles.grip, thumbStyle, disabled ? styles.shadowDisable : styles.shadow, {
backgroundColor: thumbColor,
width: containerSize.width,
height: containerSize.height
}, {
transform: [{
translateX: this.state.translateXValue
}]
}]} />
</_reactNative.View>;
}
}
exports.default = Switch;
Switch.defaultProps = {
checked: false,
size: 'default',
thumbColor: '#fff',
color: '#4DD964',
onValueChange: () => {}
};
const styles = _reactNative.StyleSheet.create({
warpper: {
position: 'relative',
borderRadius: 16,
backgroundColor: '#E6E6E6'
},
disabled: {
backgroundColor: 'rgba(255, 255, 255, 0.6)',
borderRadius: 16,
zIndex: 22
},
bg: {
borderRadius: 16,
borderWidth: 2,
borderColor: '#E6E6E6'
},
position: {
position: 'absolute',
backgroundColor: 'transparent',
top: 0,
bottom: 0,
left: 0,
right: 0
},
grip: {
top: 2,
borderRadius: 16
},
shadowDisable: {
shadowColor: '#000',
shadowOffset: {
width: 10,
height: 10
},
shadowOpacity: 0.3,
shadowRadius: 2
},
shadow: {
shadowColor: '#000',
shadowOffset: {
width: 4,
height: 4
},
shadowOpacity: 0.2,
shadowRadius: 3
}
});
module.exports = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Td2l0Y2gvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlN3aXRjaCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInRyYW5zbGF0ZVhWYWx1ZSIsImhlaWdodCIsIm9uUHJlc3MiLCJjaGVja2VkIiwic3RhdGUiLCJzZXRTdGF0ZSIsImFuaW1hdGVkU3RhcnQiLCJvblZhbHVlQ2hhbmdlIiwibWVhc3VyZUNvbnRhaW5lciIsImV2ZW50IiwibGF5b3V0SGVpZ2h0Iiwid2lkdGgiLCJsYXlvdXRXaWR0aCIsIm5hdGl2ZUV2ZW50IiwibGF5b3V0Iiwic2l6ZSIsImNvbnRhaW5lclNpemUiLCJzZXRWYWx1ZSIsImJvcmRlclZhbHVlIiwiQW5pbWF0ZWQiLCJWYWx1ZSIsImJnT3BhY2l0eSIsInZhbHVlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXh0UHJvcHMiLCJwYXJhbGxlbCIsInNlcXVlbmNlIiwic3ByaW5nIiwidG9WYWx1ZSIsIm92ZXJzaG9vdENsYW1waW5nIiwidXNlTmF0aXZlRHJpdmVyIiwic3RhcnQiLCJyZW5kZXIiLCJzdHlsZSIsImNvbG9yIiwiZGlzYWJsZWQiLCJ0aHVtYkNvbG9yIiwidHJhY2tTdHlsZSIsInRodW1iU3R5bGUiLCJvdGhlclByb3BzIiwiYmdCb3JkZXIiLCJpbnRlcnBvbGF0ZSIsImlucHV0UmFuZ2UiLCJvdXRwdXRSYW5nZSIsInNpemVTdHlsIiwic3R5bGVzIiwid2FycHBlciIsInBvc2l0aW9uIiwiYmciLCJib3JkZXJXaWR0aCIsInpJbmRleCIsImJhY2tncm91bmRDb2xvciIsImJvcmRlclJhZGl1cyIsIm9wYWNpdHkiLCJncmlwIiwic2hhZG93RGlzYWJsZSIsInNoYWRvdyIsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgiLCJkZWZhdWx0UHJvcHMiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiYm9yZGVyQ29sb3IiLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJzaGFkb3dDb2xvciIsInNoYWRvd09mZnNldCIsInNoYWRvd09wYWNpdHkiLCJzaGFkb3dSYWRpdXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQWdDZSxNQUFNQSxNQUFOLFNBQXFCQyxlQUFNQyxTQUEzQixDQUErRDtBQVU1RUMsRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQXFCO0FBQzlCLFVBQU1BLEtBQU47QUFEOEIsU0FUaENDLGVBU2dDLEdBVE4sQ0FTTTtBQUFBLFNBUmhDQyxNQVFnQyxHQVJmLEVBUWU7O0FBQUEsU0E2RGhDQyxPQTdEZ0MsR0E2RHRCLE1BQU07QUFDZCxZQUFNQyxPQUFPLEdBQUcsQ0FBQyxLQUFLQyxLQUFMLENBQVdELE9BQTVCO0FBQ0EsV0FBS0UsUUFBTCxDQUFjO0FBQUVGLFFBQUFBO0FBQUYsT0FBZCxFQUEyQixNQUFNO0FBQy9CLGFBQUtHLGFBQUwsQ0FBbUJILE9BQW5CO0FBQ0EsYUFBS0osS0FBTCxDQUFXUSxhQUFYLENBQTBCSixPQUExQjtBQUNELE9BSEQ7QUFJRCxLQW5FK0I7O0FBQUEsU0FvRWhDSyxnQkFwRWdDLEdBb0VaQyxLQUFELElBQThCO0FBQy9DLFlBQU07QUFBRU4sUUFBQUE7QUFBRixVQUFjLEtBQUtDLEtBQXpCO0FBQ0EsWUFBTTtBQUFFSixRQUFBQTtBQUFGLFVBQXNCLEtBQUtJLEtBQWpDO0FBQ0EsWUFBTTtBQUFFSCxRQUFBQSxNQUFNLEVBQUVTLFlBQVY7QUFBd0JDLFFBQUFBLEtBQUssRUFBRUM7QUFBL0IsVUFBK0NILEtBQUssQ0FBQ0ksV0FBTixDQUFrQkMsTUFBdkU7QUFDQSxZQUFNYixNQUFNLEdBQUdTLFlBQVksR0FBRyxDQUE5QjtBQUNBLFlBQU1DLEtBQUssR0FBR1YsTUFBZDtBQUNBLFlBQU1jLElBQUksR0FBRztBQUFFSixRQUFBQSxLQUFGO0FBQVNWLFFBQUFBO0FBQVQsT0FBYjtBQUNBLFdBQUtBLE1BQUwsR0FBY0EsTUFBTSxHQUFHLENBQXZCO0FBQ0EsWUFBTUcsS0FBSyxHQUFH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UFI7QUFyQ3VCLENBQWxCLENBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgVG91Y2hhYmxlT3BhY2l0eSxcbiAgQW5pbWF0ZWQsXG4gIFN3aXRjaFByb3BzIGFzIFN3aXRjaFByb3BzRGVmYXVsdCxcbiAgVmlldyxcbiAgVmlld1N0eWxlLFxuICBMYXlvdXRDaGFuZ2VFdmVudCxcbiAgU3R5bGVTaGVldCxcbn0gZnJvbSAncmVhY3QtbmF0aXZlJztcblxuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hQcm9wcyBleHRlbmRzIFN3aXRjaFByb3BzRGVmYXVsdCB7XG4gIHRyYWNrU3R5bGU/OiBWaWV3U3R5bGU7XG4gIHRodW1iU3R5bGU/OiBWaWV3U3R5bGU7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjb2xvcj86IHN0cmluZztcbiAgLyoqXG4gICAqIOiuvue9ruWkp+Wwj1xuICAgKi9cbiAgc2l6ZT86ICdzbWFsbCcgfCAnZGVmYXVsdCcgfCAnbGFyZ2UnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN3aXRjaFN0YXRlIHtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbiAgYm9yZGVyVmFsdWU6IEFuaW1hdGVkLlZhbHVlO1xuICB0cmFuc2xhdGVYVmFsdWU6IEFuaW1hdGVkLlZhbHVlO1xuICBiZ09wYWNpdHk6IEFuaW1hdGVkLlZhbHVlO1xuICBjb250YWluZXJTaXplOiB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFN3aXRjaFByb3BzLCBTd2l0Y2hTdGF0ZT4ge1xuICB0cmFuc2xhdGVYVmFsdWU6IG51bWJlciA9IDI7XG4gIGhlaWdodDogbnVtYmVyID0gMTY7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHM6IFN3aXRjaFByb3BzID0ge1xuICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICB0aHVtYkNvbG9yOiAnI2ZmZicsXG4gICAgY29sb3I6ICcjNEREOTY0JyxcbiAgICBvblZhbHVlQ2hhbmdlOiAoKSA9PiB7fSxcbiAgfTtcbiAgY29uc3RydWN0b3IocHJvcHM6IFN3aXRjaFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjaGVja2VkOiAhIXRoaXMucHJvcHMuY2hlY2tlZCxcbiAgICAgIGNvbnRhaW5lclNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxuICAgICAgYm9yZGVyVmFsdWU6IG5ldyBBbmltYXRlZC5WYWx1ZSgwKSxcbiAgICAgIHRyYW5zbGF0ZVhWYWx1ZTogbmV3IEFuaW1hdGVkLlZhbHVlKDIpLFxuICAgICAgYmdPcGFjaXR5OiBuZXcgQW5pbWF0ZWQuVmFsdWUocHJvcHMudmFsdWUgPyAxIDogMCksXG4gICAgfTtcbiAgICB0aGlzLmFuaW1hdGVkU3RhcnQoISF0aGlzLnByb3BzLmNoZWNrZWQpO1xuICB9XG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wczogU3dpdGNoUHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jaGVja2VkICE9PSBuZXh0UHJvcHMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNoZWNrZWQ6ICEhbmV4dFByb3BzLmNoZWNrZWQgfSwgKCkgPT4ge1xuICAgICAgICB0aGlzLmFuaW1hdGVkU3RhcnQoISFuZXh0UHJvcHMuY2hlY2tlZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgYW5pbWF0ZWRTdGFydChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJvcmRlclZhbHVlLCB7XG4gICAgICAgICAgICB0b1ZhbHVlOiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS5iZ09wYWNpdHksIHtcbiAgICAgICAgICAgIHRvVmFsdWU6IDEsXG4gICAgICAgICAgICBvdmVyc2hvb3RDbGFtcGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHVzZU5hdGl2ZURyaXZlcjogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0pLFxuICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS50cmFuc2xhdGVYVmFsdWUsIHtcbiAgICAgICAgICB0b1ZhbHVlOiB0aGlzLnRyYW5zbGF0ZVhWYWx1ZSxcbiAgICAgICAgICBvdmVyc2hvb3RDbGFtcGluZzogdHJ1ZSxcbiAgICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgIF0pLnN0YXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgICAgQW5pbWF0ZWQuc2VxdWVuY2UoW1xuICAgICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLmJnT3BhY2l0eSwge1xuICAgICAgICAgICAgdG9WYWx1ZTogMCxcbiAgICAgICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBBbmltYXRlZC5zcHJpbmcodGhpcy5zdGF0ZS5ib3JkZXJWYWx1ZSwge1xuICAgICAgICAgICAgdG9WYWx1ZTogMixcbiAgICAgICAgICAgIG92ZXJzaG9vdENsYW1waW5nOiB0cnVlLFxuICAgICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICAgIEFuaW1hdGVkLnNwcmluZyh0aGlzLnN0YXRlLnRyYW5zbGF0ZVhWYWx1ZSwge1xuICAgICAgICAgIHRvVmFsdWU6IDIsXG4gICAgICAgICAgb3ZlcnNob290Q2xhbXBpbmc6IHRydWUsXG4gICAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZSxcbiAgICAgICAgfSksXG4gICAgICBdKS5zdGFydCgpO1xuICAgIH1cbiAgfVxuICBvblByZXNzID0gKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAhdGhpcy5zdGF0ZS5jaGVja2VkO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjaGVja2VkIH0sICgpID0+IHtcbiAgICAgIHRoaXMuYW5pbWF0ZWRTdGFydChjaGVja2VkKTtcbiAgICAgIHRoaXMucHJvcHMub25WYWx1ZUNoYW5nZSEoY2hlY2tlZCk7XG4gICAgfSk7XG4gIH07XG4gIG1lYXN1cmVDb250YWluZXIgPSAoZXZlbnQ6IExheW91dENoYW5nZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBjaGVja2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdHJhbnNsYXRlWFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgaGVpZ2h0OiBsYXlvdXRIZWlnaHQsIHdpZHRoOiBsYXlvdXRXaWR0aCB9ID0gZXZlbnQubmF0aXZlRXZlbnQubGF5b3V0O1xuICAgIGNvbnN0IGhlaWdodCA9IGxheW91dEhlaWdodCAtIDQ7XG4gICAgY29uc3Qgd2lkdGggPSBoZWlnaHQ7XG4gICAgY29uc3Qgc2l6ZSA9IHsgd2lkdGgsIGhlaWdodCB9O1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICBjb25zdCBzdGF0ZSA9IHsgY29udGFpbmVyU2l6ZTogc2l6ZSB9O1xuICAgIHRoaXMudHJhbnNsYXRlWFZhbHVlID0gbGF5b3V0V2lkdGggLSAyIC0gd2lkdGg7XG4gICAgdHJhbnNsYXRlWFZhbHVlLnNldFZhbHVlKGNoZWNrZWQgPyBsYXlvdXRXaWR0aCAtIDIgLSB3aWR0aCA6IDIpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5zdGF0ZSB9LCAoKSA9PiB7XG4gICAgICB0aGlzLmFuaW1hdGVkU3RhcnQoISF0aGlzLnByb3BzLmNoZWNrZWQpO1xuICAgIH0pO1xuICB9O1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3R5bGUsXG4gICAgICBzaXplLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgY2hlY2tlZCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB0aHVtYkNvbG9yLFxuICAgICAgdHJhY2tTdHlsZSxcbiAgICAgIHRodW1iU3R5bGUsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBjb250YWluZXJTaXplIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGJnQm9yZGVyID0gdGhpcy5zdGF0ZS5ib3JkZXJWYWx1ZS5pbnRlcnBvbGF0ZSh7XG4gICAgICBpbnB1dFJhbmdlOiBbMiwgdGhpcy5oZWlnaHRdLFxuICAgICAgb3V0cHV0UmFuZ2U6IFsyLCB0aGlzLmhlaWdodF0sXG4gICAgICAvLyBleHRyYXBvbGF0ZTogJ2NsYW1wJyxcbiAgICB9KTtcbiAgICBjb25zdCBzaXplU3R5bDogVmlld1N0eWxlID0ge307XG4gICAgc3dpdGNoIChzaXplKSB7XG4gICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgIHNpemVTdHlsLmhlaWdodCA9IDIwO1xuICAgICAgICBzaXplU3R5bC53aWR0aCA9IDMwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgc2l6ZVN0eWwuaGVpZ2h0ID0gMzA7XG4gICAgICAgIHNpemVTdHlsLndpZHRoID0gNDg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2l6ZVN0eWwuaGVpZ2h0ID0gMjY7XG4gICAgICAgIHNpemVTdHlsLndpZHRoID0gMzg7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgey4uLm90aGVyUHJvcHN9IG9uTGF5b3V0PXt0aGlzLm1lYXN1cmVDb250YWluZXJ9IHN0eWxlPXtbc3R5bGVzLndhcnBwZXIsIHNpemVTdHlsLCBzdHlsZV19PlxuICAgICAgICB7ZGlzYWJsZWQgJiYgPFZpZXcgc3R5bGU9e1tzdHlsZXMucG9zaXRpb24sIHN0eWxlcy5kaXNhYmxlZF19IC8+fVxuICAgICAgICA8QW5pbWF0ZWQuVmlldyBzdHlsZT17W3N0eWxlcy5iZywgc3R5bGVzLnBvc2l0aW9uLCB0cmFja1N0eWxlLCB7IGJvcmRlcldpZHRoOiBiZ0JvcmRlciB9XX0gLz5cbiAgICAgICAgPFRvdWNoYWJsZU9wYWNpdHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtbmF0aXZlL25vLWlubGluZS1zdHlsZXNcbiAgICAgICAgICBzdHlsZT17W3N0eWxlcy5wb3NpdGlvbiwgeyB6SW5kZXg6IDEgfV19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy5vblByZXNzfVxuICAgICAgICAvPlxuICAgICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgICBzdHlsZXMucG9zaXRpb24sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtbmF0aXZlL25vLWlubGluZS1zdHlsZXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnN0YXRlLmNoZWNrZWQgPyBjb2xvciA6ICcnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE2LFxuICAgICAgICAgICAgICBvcGFjaXR5OiB0aGlzLnN0YXRlLmJnT3BhY2l0eSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc3R5bGVzLmdyaXAsXG4gICAgICAgICAgICB0aHVtYlN0eWxlLFxuICAgICAgICAgICAgZGlzYWJsZWQgPyBzdHlsZXMuc2hhZG93RGlzYWJsZSA6IHN0eWxlcy5zaGFkb3csXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGh1bWJDb2xvcixcbiAgICAgICAgICAgICAgd2lkdGg6IGNvbnRhaW5lclNpemUud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogY29udGFpbmVyU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm06IFt7IHRyYW5zbGF0ZVg6IHRoaXMuc3RhdGUudHJhbnNsYXRlWFZhbHVlIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAvPlxuICAgICAgPC9WaWV3PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICB3YXJwcGVyOiB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAxNixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRTZFNkU2JyxcbiAgfSxcbiAgZGlzYWJsZWQ6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNiknLFxuICAgIGJvcmRlclJhZGl1czogMTYsXG4gICAgekluZGV4OiAyMixcbiAgfSxcbiAgYmc6IHtcbiAgICBib3JkZXJSYWRpdXM6IDE2LFxuICAgIGJvcmRlcldpZHRoOiAyLFxuICAgIGJvcmRlckNvbG9yOiAnI0U2RTZFNicsXG4gIH0sXG4gIHBvc2l0aW9uOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIHRvcDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgfSxcbiAgZ3JpcDoge1xuICAgIHRvcDogMixcbiAgICBib3JkZXJSYWRpdXM6IDE2LFxuICB9LFxuICBzaGFkb3dEaXNhYmxlOiB7XG4gICAgc2hhZG93Q29sb3I6ICcjMDAwJyxcbiAgICBzaGFkb3dPZmZzZXQ6IHtcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgfSxcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjMsXG4gICAgc2hhZG93UmFkaXVzOiAyLFxuICB9LFxuICBzaGFkb3c6IHtcbiAgICBzaGFkb3dDb2xvcjogJyMwMDAnLFxuICAgIHNoYWRvd09mZnNldDoge1xuICAgICAgd2lkdGg6IDQsXG4gICAgICBoZWlnaHQ6IDQsXG4gICAgfSxcbiAgICBzaGFkb3dPcGFjaXR5OiAwLjIsXG4gICAgc2hhZG93UmFkaXVzOiAzLFxuICB9LFxufSk7XG4iXX0=